package org.realogic.cfm;

import java.util.Properties;

/**
 * 系统总的配置参数
 * 
 */
public final class KSystemEnvs {

	public static String CONFIG_APPLICATION_ROOT_KEY = "app.root";
	
	public static String CONFIG_INITIALIZER = "app.init.initializer";

	/**
	 * Dhtmlx Grid目录
	 */
	private String dhtmlxGridPath;

	/**
	 * 属性
	 */
	private Properties props = new Properties();

	private KSystemEnvs() {
	}

	private static class LazyHolder {
		private static final KSystemEnvs INSTANCE = new KSystemEnvs();
	}

	public static KSystemEnvs getInstance() {
		return LazyHolder.INSTANCE;
	}

	public String getDhtmlxGridPath() {
		return dhtmlxGridPath;
	}

	public void setDhtmlxGridPath(String dhtmlxGridPath_) {
		dhtmlxGridPath = dhtmlxGridPath_;
	}

	/**
	 * 返回所有的配置对
	 * 
	 * @return
	 */
	public Properties getAllProperties() {
		return props;
	}

	/**
	 * 根据key得到value
	 * 
	 * @param key
	 * @return
	 */
	public String getProperty(String key) {
		return props.getProperty(key);
	}

	/**
	 * 取得整型值
	 * 
	 * @param key
	 * @return 当配置不存在返回null
	 */
	public Integer getIntegerProperty(String key) {
		String t = getProperty(key);
		if (t != null) {
			return Integer.parseInt(t);
		}

		return null;
	}

	/**
	 * 取得整型值
	 * 
	 * @param key
	 * @param defaultValue
	 * @return 当配置不存在返回defaultValue
	 */
	public Integer getIntegerProperty(String key, int defaultValue) {
		String t = getProperty(key);
		if (t != null) {
			return Integer.parseInt(t);
		}

		return defaultValue;
	}

	/**
	 * 根据key得到value，当value为<code>null</code>的时候返回<code>defaultValue</code>
	 * 
	 * @param key
	 * @param defaultValue
	 * @return
	 */
	public String getProperty(String key, String defaultValue) {
		String val = getProperty(key);
		return (val == null) ? defaultValue : val;
	}

	/**
	 * 检测是否包含某个配置key
	 * 
	 * @param key
	 * @return
	 */
	public boolean containsKey(String key) {
		return this.props.containsKey(key);
	}

	/**
	 * 第一次加载时，初始化
	 * 
	 * @param props
	 */
	public void init(Properties props) {
		props.putAll(props);
	}

	/**
	 * 设置系统属性
	 * 
	 * @param key
	 *            系统属性key
	 * @param value
	 *            系统属性值
	 */
	public void put(String key, String value) {
		this.props.put(key, value);
	}

	/**
	 * 批量设置系统属性
	 * 
	 * @param props
	 *            批量设置的属性对象
	 */
	public void putAll(Properties props) {
		this.props.putAll(props);
	}

}
